package com.rabbiter.cm.domain;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
import java.util.Objects;

/**
 * 表示系统中的角色实体。
 * 角色通常用于权限控制系统，每个角色可以拥有多个权限资源。
 */
public class SysRole implements Serializable {

    /**
     * 序列化版本唯一标识符，确保类的版本一致性。
     */
    private static final Long serialVersionUID = 1L;

    /**
     * 角色的唯一标识 ID。
     */
    private Long roleId;

    /**
     * 角色名称，不能为空。
     * 使用 @NotBlank 注解进行非空校验，为空时会提示“角色名称不能为空”。
     */
    @NotBlank(message = "角色名称不能为空")
    private String roleName;

    /**
     * 角色描述信息，不能为空。
     * 使用 @NotBlank 注解进行非空校验，为空时会提示“角色描述不能为空”。
     */
    @NotBlank(message = "角色描述不能为空")
    private String roleDesc;

    /**
     * 当前角色所拥有的权限资源列表。
     * 权限以树形结构存储，使用 [children](file://E:\WORKSPACE\untitled38\src\main\java\com\rabbiter\cm\domain\SysResource.java#L211-L211) 命名便于统一处理和递归读取所有权限。
     */
    private List<SysResource> children;


    /**
     * 默认构造函数，用于创建一个空的角色对象。
     */
    public SysRole() {
    }

    /**
     * 带参数的构造函数，用于初始化所有字段。
     *
     * @param roleId   角色的唯一标识 ID
     * @param roleName 角色名称
     * @param roleDesc 角色描述
     * @param children 角色拥有的权限资源列表
     */
    public SysRole(Long roleId, String roleName, String roleDesc, List<SysResource> children) {
        this.roleId = roleId;
        this.roleName = roleName;
        this.roleDesc = roleDesc;
        this.children = children;
    }

    // Getter 和 Setter 方法

    /**
     * 获取角色的唯一标识 ID。
     *
     * @return 返回 roleId
     */
    public Long getRoleId() {
        return roleId;
    }

    /**
     * 设置角色的唯一标识 ID。
     *
     * @param roleId 需要设置的 roleId
     */
    public void setRoleId(Long roleId) {
        this.roleId = roleId;
    }

    /**
     * 获取角色名称。
     *
     * @return 返回 roleName
     */
    public String getRoleName() {
        return roleName;
    }

    /**
     * 设置角色名称。
     *
     * @param roleName 需要设置的角色名称
     */
    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    /**
     * 获取角色描述信息。
     *
     * @return 返回 roleDesc
     */
    public String getRoleDesc() {
        return roleDesc;
    }

    /**
     * 设置角色描述信息。
     *
     * @param roleDesc 需要设置的角色描述
     */
    public void setRoleDesc(String roleDesc) {
        this.roleDesc = roleDesc;
    }

    /**
     * 获取当前角色所拥有的权限资源列表。
     *
     * @return 返回权限资源列表
     */
    public List<SysResource> getChildren() {
        return children;
    }

    /**
     * 设置当前角色所拥有的权限资源列表。
     *
     * @param children 需要设置的权限资源列表
     */
    public void setChildren(List<SysResource> children) {
        this.children = children;
    }

    /**
     * 判断当前对象是否与另一个对象相等。
     * 根据所有字段判断两个角色对象是否相同。
     *
     * @param o 要比较的对象
     * @return 如果对象相等则返回 true，否则返回 false
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        SysRole sysRole = (SysRole) o;
        return Objects.equals(roleId, sysRole.roleId) && Objects.equals(roleName, sysRole.roleName) && Objects.equals(roleDesc, sysRole.roleDesc) && Objects.equals(children, sysRole.children);
    }

    /**
     * 生成基于所有字段的哈希码。
     *
     * @return 返回哈希码值
     */
    @Override
    public int hashCode() {
        return Objects.hash(roleId, roleName, roleDesc, children);
    }

    /**
     * 返回当前对象的字符串表示，用于调试和日志输出。
     *
     * @return 包含所有字段信息的字符串
     */
    @Override
    public String toString() {
        return "SysRole{" +
                "roleId=" + roleId +
                ", roleName='" + roleName + '\'' +
                ", roleDesc='" + roleDesc + '\'' +
                ", children=" + children +
                '}';
    }
}
package com.rabbiter.cm.domain;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
import java.util.Objects;

public class SysRole implements Serializable {

    private static final Long serialVersionUID = 1L;

    private Long roleId;

    //角色名称
    @NotBlank(message = "角色名称不能为空")
    private String roleName;

    //角色描述
    @NotBlank(message = "角色描述不能为空")
    private String roleDesc;


    //角色拥有的权限，分多级权限存储，取名为children方便读取所有权限
    private List<SysResource> children;

    public SysRole() {
    }

    public SysRole(Long roleId, String roleName, String roleDesc, List<SysResource> children) {
        this.roleId = roleId;
        this.roleName = roleName;
        this.roleDesc = roleDesc;
        this.children = children;
    }

    public Long getRoleId() {
        return roleId;
    }

    public void setRoleId(Long roleId) {
        this.roleId = roleId;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public String getRoleDesc() {
        return roleDesc;
    }

    public void setRoleDesc(String roleDesc) {
        this.roleDesc = roleDesc;
    }

    public List<SysResource> getChildren() {
        return children;
    }

    public void setChildren(List<SysResource> children) {
        this.children = children;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        SysRole sysRole = (SysRole) o;
        return Objects.equals(roleId, sysRole.roleId) && Objects.equals(roleName, sysRole.roleName) && Objects.equals(roleDesc, sysRole.roleDesc) && Objects.equals(children, sysRole.children);
    }

    @Override
    public int hashCode() {
        return Objects.hash(roleId, roleName, roleDesc, children);
    }

    @Override
    public String toString() {
        return "SysRole{" +
                "roleId=" + roleId +
                ", roleName='" + roleName + '\'' +
                ", roleDesc='" + roleDesc + '\'' +
                ", children=" + children +
                '}';
    }
}
